package com.xli.ui.module.framemodule.mapper;

import com.xli.ui.module.framemodule.entity.FrameModule;
import com.xli.ui.module.framemodule.entity.ModuleCache;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.ReportingPolicy;
import org.mapstruct.factory.Mappers;

import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;

@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface IModuleCacheMapper {

    IModuleCacheMapper INSTANCE = Mappers.getMapper(IModuleCacheMapper.class);

    ModuleCache toCacheEntity(FrameModule frameModule);

    List<ModuleCache> toCacheList(List<FrameModule> frameModuleList);

    List<FrameModule> toEntityList(List<ModuleCache> moduleCacheList);

    default List<FrameModule> toEntityList(List<ModuleCache> cacheList, Function<Long, FrameModule> query) {
        return cacheList.stream().map(cache -> query.apply(cache.getId())).collect(Collectors.toList());
    }
}
